//连表查询
/**
 * 在关系数据库中：表的关系一般有三种
 * 
 * 看关系时要看两边（关系是根据业务需求来确定的）
 * 
 * 1.一对一的关系 两个 一对一称 为 一对一 如：夫妻关系
 * 2.一对多关系  一个一对一，一个对多个的关系 
 * 3.多对多关系： 两个 一对多关系 称为多对多关系 如游戏玩家和
 * 
 * 主键：用来区别数据的唯一性
 * 外键：用来表示两个表之间的关系的那个列
 */

 var mongoose = require('mongoose');

 mongoose.connect('mongodb://localhost:27017/f82-1',{},(e)=>{
    if(e){
        console.log(e);
        console.log("连接失败");
        return;
    }
    console.log("链接成功");
});

var studentSchema = mongoose.Schema({
    name: String,
    age:Number,
    gender:String,
    classId:{
        type:mongoose.Schema.Types.ObjectId,
        ref:"classModel"   
    }
});

var classSchema = mongoose.Schema({
    name: String, 
    teacherId:{
        type:mongoose.Schema.Types.ObjectId,
        ref:"teacherModel"   
    }
});

var teacherSchema = mongoose.Schema({
    name: String,
    tel:String
});



var studentModel = mongoose.model('studentModel', studentSchema,"student");

var classModel = mongoose.model('classModel', classSchema,"class");

var teacherModel = mongoose.model('teacherModel', teacherSchema,"teacher");

// let result =studentModel.findOne({name:"张三"}).populate({
//     path:"classId",
//     populate:{
//         path:"teacherId"
//     }
// }).exec();
// result.then((data)=>{
// console.log(data);
// console.log(`学生名字：${data.name}`);
// console.log(`学生班级：${data.classId.name}`);
// console.log(`学生名字：${data.classId.teacherId.name}`);
// })



// let result =studentModel.find().populate({
//     path:"classId",
//     match:{name:"一班"},
//     select:"name",
//     populate:{
//         path:"teacherId"
//     }
// }).exec();
// result.then((data)=>{
// console.log(data);
// })


let result =studentModel.find().populate("classId",{name:"二班"}).exec();
result.then((data)=>{
console.log(data);
})

